package com.example.demo.service;

import com.example.demo.dto.common.ConsultHistoryModel;
import com.example.demo.entity.User;
import com.example.demo.entity.relation.ConsultRecord;
import com.example.demo.enums.Role;
import com.example.demo.exception.EntityAlreadyExistException;
import com.example.demo.exception.EntityNotExistException;

import java.util.List;
import java.util.Map;

public interface UserService {
    /**
     * 注册时添加用户
     * @param user 用户对象
     * @return id
     */
    String addUser(User user) throws EntityAlreadyExistException;

    /**
     * 根据电话number 删除用户
     * @param number 用户电话
     */
    void deleteUser(String number);

    /**
     * 批量删除用户
     * @param numbers id列表
     */
    void deleteUserBatch(List<String> numbers);

    /**
     * 更新用户信息
     * @param number 用户number
     * @param user 用户信息
     * @throws EntityNotExistException 用户不存在
     */
    void updateUser(String number, User user) throws EntityNotExistException, IllegalAccessException;

    /**
     * 跟新用户角色
     * @param number 用户number
     * @param role 角色0:管理员，1:用户
     * @throws EntityNotExistException 用户不存在
     */
    void updateUserRole(String number, Role role) throws EntityNotExistException;

    List<User> getUserList(List<String> numbers);

    Map<String, Object> login(String number, String code) throws EntityNotExistException;

    Map<String, Object> loginForAdmin(String phoneNumber, String password) throws EntityNotExistException;

    void logout(String number);

    List<ConsultRecord> getConsultRecords(String number);

    /**
     * 电话，既number作为token
     * @param number 用户手机
     * @return 用户信息
     */
    User getUserByNumber(String number) throws EntityNotExistException;

    void evaluateConsult(ConsultHistoryModel model) throws EntityNotExistException;

    void banUser(String number) throws EntityNotExistException;

    List<User> getAllUsers();

    ConsultHistoryModel addConsultHistory(ConsultHistoryModel model) throws EntityNotExistException;
}
